//package com.example.shiro.shiro.config;
//
//import Permission;
//import Role;
//import User;
//import LoginService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.shiro.SecurityUtils;
//import org.apache.shiro.authc.AuthenticationException;
//import org.apache.shiro.authc.AuthenticationInfo;
//import org.apache.shiro.authc.AuthenticationToken;
//import org.apache.shiro.authc.SimpleAuthenticationInfo;
//import org.apache.shiro.authz.AuthorizationInfo;
//import org.apache.shiro.authz.SimpleAuthorizationInfo;
//import org.apache.shiro.realm.AuthorizingRealm;
//import org.apache.shiro.session.Session;
//import org.apache.shiro.subject.PrincipalCollection;
//import org.apache.shiro.subject.Subject;
//import org.springframework.beans.factory.annotation.Autowired;
//
///**
// * @ Author ：jujh @ Date ：Created in 14:08 2018/10/29 @ Description：
// */
//@Slf4j
//public class MyShiroRealm extends AuthorizingRealm {
//
//    // 用于用户查询
//    @Autowired
//    private LoginService loginService;
//
//    /**
//     * 角色权限和对应权限添加
//     *
//     * @param principalCollection
//     * @return
//     */
//    @Override
//    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//        // 获取登录用户名
//        String name = (String) principalCollection.getPrimaryPrincipal();
//        // 查询用户名称
//        User user = loginService.findByName(name);
//        // 添加角色和权限
//        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
//        for (Role role : user.getRoles()) {
//            // 添加角色
//            simpleAuthorizationInfo.addRole(role.getRoleName());
//            for (Permission permission : role.getPermissions()) {
//                // 添加权限
//                simpleAuthorizationInfo.addStringPermission(permission.getPermission());
//            }
//        }
//        return simpleAuthorizationInfo;
//    }
//
//    /**
//     * 用户认证
//     *
//     * @param authenticationToken
//     * @return
//     * @throws AuthenticationException
//     */
//    @Override
//    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
//            throws AuthenticationException {
//        // 加这一步的目的是在Post请求的时候会先进认证，然后在到请求
//        if (authenticationToken.getPrincipal() == null) {
//            return null;
//        }
//        // 获取用户信息
//        String name = authenticationToken.getPrincipal().toString();
//        User user = loginService.findByName(name);
//        if (user == null) {
//            // 这里返回后会报出对应异常
//            return null;
//        } else {
//            // 这里验证authenticationToken和simpleAuthenticationInfo的信息
//            SimpleAuthenticationInfo simpleAuthenticationInfo =
//                    new SimpleAuthenticationInfo(name, user.getPassword().toString(), getName());
//            log.info("绘画写入session开始");
////            setSession(BaseController.ACCOUNTKEY,user);//写入用户信息到回话中
////            setSession("apps", apps); 		   //所有应用
////            setSession("currApp", apps.get(0));//当前选择的应用
////            setSession("menus", permissionService.findByUser(upToken.getUsername(),apps.get(0).getAppCd(),null,user.getIsAdmin()==1));//当前应用的菜单
//            log.info("绘画写入session结束");
//            return simpleAuthenticationInfo;
//        }
//    }
//
//    /**
//     * 将一些数据放到ShiroSession中,以便于其它地方使用
//     * 比如Controller,使用时直接用HttpSession.getAttribute(key)就可以取到
//     */
//    protected void setSession(Object key, Object value) {
//        Subject currentUser = SecurityUtils.getSubject();
//        if (null != currentUser) {
//            Session session = currentUser.getSession();
//            log.info("Session默认超时时间为[" + session.getTimeout() / 1000 + "]秒");
//            if (null != session) {
//                session.setAttribute(key, value);
//            }
//        }
//    }
//}
